package susebs.pb.travel_server.controller;

import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;
import susebs.pb.travel_server.domain.PageDto;
import susebs.pb.travel_server.domain.Result;
import susebs.pb.travel_server.entity.Comments;
import susebs.pb.travel_server.service.CommentsService;

import javax.annotation.Resource;

/**
 * 评论表控制层
 * 用户只有查、“增”、“删”权限，没有评论修改权限，评论一经发布无法修改，只能删了重发。
 * “增”：因为对于用户来说是发布（新增）评论，但是具体执行时是对预插入数据的修改操作（comment、comment_rating赋值）
 * “删”：删除内容而保留权限，即只修改comment和comment_rating的值，而不真正删除整条数据
 */
@RestController
@RequestMapping("/comments")
@CrossOrigin
public class CommentsController {
    @Resource
    private CommentsService commentsService;

    /**
     * 分页查询
     * @param pageDto 仅包含其中的comments实体和分页数据
     * @return 包含用户信息的用户全部/针对某一实体的评论数据
     * 请求时机：
     * 全部：用户点击“我的评论”时--仅传入userId，返回所有评论的全部信息【不包含空】
     * 某一实体：传入userId、type和id（查询），返回评论列表【不包含空】
     */
    @PostMapping("/queryCommentsByPage")
    public Result queryCommentsByPage(@RequestBody PageDto pageDto){
//        System.out.println(pageDto);
        PageInfo pageInfo = commentsService.queryAllCommentsByPage(pageDto);
        if(pageInfo.getList().isEmpty())return Result.buildFail("暂无评论！");
        Result<Object> res = Result.buildSuccess(pageInfo);
        return res;
    }


    /**
     * 用户评论
     * 找到对应的预插入数据填充评论和评分信息
     * 请求时机：用户发布评论时（点击“发送”时）
     * 传参：userId+type+id（查询权限）  +   comment+comment_rating（填充数据）
     */
    @PostMapping("/insertComment")
    public Result insertComment(@RequestBody Comments comment){
        Comments res = commentsService.updateComments(comment);
        if(res.getCommentId() == null){//用户无评论权限
            return Result.buildFail("抱歉，您没有该评论权限或已经评论过了，请购买该服务后或者重新进行评论！");
        }
        return Result.buildSuccess(res);
    }

    /**
     * 用户删评
     * 找到对应的预插入数据，将评论和评分设置为null
     * 请求时机：用户删除评论时
     * @param commentId，评论id
     */
    @GetMapping("/deleteComment")
    public Result deleteComment(Long commentId){
        boolean res = commentsService.deleteComment(commentId);
        if(res)return Result.buildSuccess();
        return Result.buildFail("删评失败！");
    }







}
